package edu.ccut.saturn.component.impl;

import java.util.ArrayList;
import java.util.List;

import edu.ccut.saturn.component.IValidateInfo;
import edu.ccut.saturn.component.IValidateUseInfo;
import edu.ccut.saturn.component.loader.node.NodeInfoLoader;
import edu.ccut.saturn.component.xml.ISaturnElement;
import edu.ccut.saturn.component.xml.SaturnElement;

/**
 * 应用验证组件信息的实现类，实现了接口<code>IValidateUseInfo</code>。
 * <p>
 * <li>字段valueKey：记录了待验证数据的变量名；
 * <li>字段valueClassType：记录了待验证数据的类型；
 * <li>字段isValidate：记录了是否需要对数据进行验证的标识；
 * <li>字段validateInfos：记录了引用的验证规则的列表。
 * 
 * @author 温建
 * @version 1.0 2008.9.05
 */
public class SaturnValidateUseInfo implements IValidateUseInfo {

	private String valueKey;

	private String valueClassType;

	private boolean isValidate = false;

	private List<IValidateInfo> validateInfos;

	public SaturnValidateUseInfo(String valueKey, String valueClassType,
			boolean isValidate, List<IValidateInfo> validateInfos) {

		this.valueKey = valueKey;
		this.valueClassType = valueClassType;
		this.isValidate = isValidate;
		this.validateInfos = validateInfos;
	}

	public SaturnValidateUseInfo(IValidateUseInfo saturnValidateUseInfo) {
		this(saturnValidateUseInfo.getValueKey(), saturnValidateUseInfo
				.getValueClassType(), saturnValidateUseInfo.isValidate(), null);

		this.validateInfos = new ArrayList<IValidateInfo>();
		if (saturnValidateUseInfo.getValidateInfos() != null) {
			for (IValidateInfo validateInfo : saturnValidateUseInfo
					.getValidateInfos()) {
				SaturnValidateInfo newValidateInfo = new SaturnValidateInfo(
						validateInfo);
				newValidateInfo.setJSMethodName(validateInfo.getJSMethodName());
				newValidateInfo.setCustemJSMethodInfo(validateInfo
						.getCustemJSMethodInfo());
				this.validateInfos.add(newValidateInfo);
			}
		}
	}

	public String getValueKey() {
		return valueKey;
	}

	public void setValueKey(String valueKey) {
		this.valueKey = valueKey;
	}

	public String getValueClassType() {
		return valueClassType;
	}

	public void setValueClassType(String valueClassType) {
		this.valueClassType = valueClassType;
	}

	public boolean isValidate() {
		return isValidate;
	}

	public void setValidate(boolean isValidate) {
		this.isValidate = isValidate;
	}

	public List<IValidateInfo> getValidateInfos() {
		return validateInfos;
	}

	public void setValidateInfos(List<IValidateInfo> validateInfos) {
		this.validateInfos = validateInfos;
	}

	/**
	 * 获得应用验证信息的字符串表示
	 */
	public String toString() {
		return "[" + this.valueKey + ", " + this.validateInfos + "]";
	}

	public ISaturnElement toSaturnElement() {
		ISaturnElement validateUseElement = new SaturnElement(
				NodeInfoLoader.KEY_PARAMETER_VALIDATEUSE);

		validateUseElement.addAttribute("value-key", this.valueKey);
		validateUseElement.addAttribute("classType", this.getValueClassType());
		validateUseElement.addAttribute("isValidate", String
				.valueOf(this.isValidate));

		for (IValidateInfo validateInfo : this.validateInfos) {
			validateUseElement.addSubElement(validateInfo.toSaturnElement());
		}
		return validateUseElement;
	}

	public String toXmlStr() {
		ISaturnElement saturnElement = toSaturnElement();
		return saturnElement.getXMLStr();
	}
}
